기본 문법(bash shell)쉘 스크립트는 파일로 작성 후, 파일로 실행
파일의 가장 위의 첫 라인은 #!/bin/bash로 시작
쉘 스크립트 파일은 실행 권한을 가지고 있어야 한다.
‘filename.sh' 형태로 파일이름을 가진다.
hello.sh
celina@ubuntuserver:~/celina/shell$ vi hello.sh
celina@ubuntuserver:~/celina/shell$ ls -al
total 12
drwxrwxr-x 2 celina celina 4096 Jul 29 04:57 .
drwx------ 5 celina celina 4096 Jul 29 04:56 ..
-rw-rw-r-- 1 celina celina 32 Jul 29 04:57 hello.sh
celina@ubuntuserver:~/celina/shell$ chmod 777 hello.sh
celina@ubuntuserver:~/celina/shell$ ls -al
total 12
drwxrwxr-x 2 celina celina 4096 Jul 29 04:57 .
drwx------ 5 celina celina 4096 Jul 29 04:56 ..
-rwxrwxrwx 1 celina celina 32 Jul 29 04:57 hello.sh
celina@ubuntuserver:~/celina/shell$ ./hello.sh
Hello Bash!
쉘명령어를 조합해서 프로그래밍
'변수, 조건문, 반복문'
주석 #
: << "END"
echo "여기서부터 "
echo "test_01"
echo "test_02"
echo "test_03"
echo "test_04"
echo "test_05"
echo "test_06"
echo "test_07"
echo "여기까지 주석처리 됨"
END
echo "위는 모두 주석처리"
celina@ubuntuserver:~/celina/shell$ ./notes.sh
위는 모두 주석처리
변수선언
변수명=데이터
변수명=데이터 사이에 띄어쓰기는 허용되지 않음
사용
$변수명 으로 사용됨
mysql_id='root'
mysql_directory='/etc/mysql'
mysql_num=55
echo $mysql_id $mysql_num
echo $mysql_directory
celina@ubuntuserver:~/celina/shell$ ./variables.sh
root 55
/etc/mysql
리스트 변수(리스트)선언
변수명=(데이터1 데이터2 데이터3…)
사용
${변수명[인덱스번호]}
daemons=("httpd" "mysqld" "vsftpd")
echo ${daemons[1]}
echo ${daemons[@]}
echo ${daemons[*]}
echo ${#daemons[@]}
filelist=( $(ls) )
echo ${filelist[*]}
celina@ubuntuserver:~/celina/shell$ ./list.sh
mysqld
httpd mysqld vsftpd
httpd mysqld vsftpd
3
hello.sh list.sh notes.sh variables.sh
참고)
echo ${daemons[1]} mysqld
echo $daemons[1] httpd[1]
$daemons를 변수로 인식하고, [1]를 추가적인 string으로 인식
$(쉘 명령어) #명령어 결과
filelists=$(ls)
filelists=( $(ls) ) 두개 같은 결과를 출력한다.
사전 정의된 변수
$$ #쉘 프로세스 번호
$0 #쉘스크립트 이름
$1 ~ $9 #명령줄 인수
$* #모든 명령줄 인수리스트
$# #인수의 개수
$? #최근 실행한 명령어의 종료값
# 0(성공), 1-125(에러), 126(파일이 실행가능하지 않음), 128-255(시그널 발생)
ex)
ls -al -z
$$: pid
$0: ls
$1: -al
$2: -z
$*: -al -z
$#: 2
shell.sh
echo "PID" "이름" "1st인자" "인자" "인자수"
echo $$ $0 $1 $* $#
celina@ubuntuserver:~/celina/shell$ ./shell.sh -al
PID 이름 1st인자 인자 인자수
2666 ./shell.sh -al -al 1
연산자
expr: 숫자 계산
expr를 사용하는 경우 역작은 따옴표( ` )를 사용해야 한다.(작은 따옴표 ‘ 아님)
연산자 *와 괄호 () 앞에는 역슬래시( \ )와 같이 사용
연산자와 숫자, 변수, 기호 사이에는 space를 넣어야 한다.
num=`expr \( 3 \* 5 \) / 4 + 7`
echo $num
조건문
기본 if 구문: 명령문을 꼭 탭으로 띄우지 않아도 된다.(then과 fi 사이에만 있으면 된다.)
if.sh
a=$1
b=$2
if [ $a != $b ]
then
echo "NOT SAME"
exit
fi
celina@ubuntuserver:~/celina/shell$ ./if.sh 5 2
NOT SAME
조건조건 작성이 다른 프로그래밍 언어와 달리 가독성이 현저히 떨어진다. 참조해서 사용할 것
문자비교
문자1 == 문자2
문자1 != 문자2
-z 문자 #문자가 null이면 참
-n 문자 #문자가 null이 아니면 참
수치비교
[[ $1 > $2 ]] 정상 동작하기는 하나 아래의 기본 문법 사용이 권장된다.( <=, >=은 동작 안함)
값1 -eq 값2 #equal
값1 -ne 값2 #not equal
값1 -lt 값2 #less than
값1 -le 값2 #less or equal
값1 -gt 값2 #greater than
값1 -ge 값2 #greater or equal
if2.sh
if[ $1 -gt $2 ]
then
echo "$1 is higher than $2"
exit
fi
Function
function string_test1(){
echo "string test1"
echo "인자값: ${@}"
}
string_test1 "hello" "world"
bash-3.2$ string_test1 "hello" "world"
string test1